package com.ansatsing.templateMethod.withHook;
//饮料制作模版类
public abstract class RecipeTemplate {
/*	//祖传饮料制作秘方---流程步骤以及整个算法骨架都在这个方法，而且此方法子类不能修改所以final了
	final void prepareRecipe() {
		boilWater();//1把水煮沸
		brew();//2沸水跟原材料发生关系 ，具体怎么发生关系有子类实现
		pourInCup();//3倒入杯子
		addCondiments();//4加调料，具体加什么调料有子类实现
	}
 
	abstract void brew();//子类实现
  
	abstract void addCondiments();//子类实现
 
	void boilWater() {
		System.out.println("Boiling water");
	}
  
	void pourInCup() {
		System.out.println("Pouring into cup");
	}*/
	void prepareRecipe() {
		boilWater();
		brew();
		pourInCup();
		if (customerWantsCondiments()) {
			addCondiments();
		}
	}
 
	abstract void brew();
 
	abstract void addCondiments();
 
	void boilWater() {
		System.out.println("Boiling water");
	}
 
	void pourInCup() {
		System.out.println("Pouring into cup");
	}
 
	boolean customerWantsCondiments() {//钩子方法
		return true;
	}	
}
